/*
 * @lc app=leetcode.cn id=221 lang=javascript
 *
 * [221] 最大正方形
 */

// @lc code=start
/**
 * @param {character[][]} matrix
 * @return {number}
 */
var maximalSquare = function (matrix) {
  let area = [];
  let maxArea = 0; //最大边长
  let m = matrix.length,
    n = matrix[0].length;
  for (let index = 0; index < m; index++) {
    area[index] = new Array();
  }

  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      //当前位是不是0,是0无法构成正方形
      if (matrix[i][j] == "0") {
        area[i][j] = 0;
      } else {
        //第一行和第一列最大构成自己本身
        if (i == 0 || j == 0) {
          area[i][j] = matrix[i][j] * 1;
        } else {
          // 特征方程 和 周围三个正方形有关系
          area[i][j] =
            Math.min(area[i - 1][j], area[i][j - 1], area[i - 1][j - 1]) + 1;
        }
      }
      //找出最大边长
      if (area[i][j] > maxArea) {
        maxArea = area[i][j];
      }
    }
  }
  return maxArea * maxArea;
};
// @lc code=end
